package isec.amov.tp2.automaintenance;

import java.util.Calendar;

public class Detalhe {
	
	private int id = -1;
	private String tipo = null;
	private int ano = -1;
	private int mes = -1;
	private int dia = -1;
	private double quilometros;
	
	private final int maxTipoLength = 50;
	private final int maxYear = 2099;
	private final double maxQuilometros = 5000000;
	 
	
	
	//Constructor
	public Detalhe(int id, String tipo, int ano, int mes, int dia, double quilometros) {
		setId(id);
		setTipo(tipo);
		setAno(ano);
		setMes(mes);
		setDia(dia);
		setQuilometros(quilometros);
	}

	/**
	 * @return the tipo
	 */
	public String getTipo() {
		return tipo;
	}

	/**
	 * @param the tipo to set
	 */
	public void setTipo(String tipo) {
		//If name's length is greater or equal than "maxTipoLength"
		//the excess gets ignored
		if(tipo.length() >= maxTipoLength) {
			tipo.substring(0, maxTipoLength);
		}
		this.tipo = tipo;
	}
	

	/**
	 * @return the ano
	 */
	public int getAno() {
		return ano;
	}

	/**
	 * @param ano the ano to set
	 */
	public void setAno(int ano) {
		int currentYear = Calendar.getInstance().get(Calendar.YEAR);
		if (ano >= currentYear && ano <= maxYear) {
			this.ano = ano;
		}
	}

	/**
	 * @return the mes
	 */
	public int getMes() {
		return mes;
	}

	/**
	 * @param mes the mes to set
	 */
	public void setMes(int mes) {
		if (mes >= 1 && mes <= 12) {
			this.mes = mes;
		}
	}

	/**
	 * @return the dia
	 */
	public int getDia() {
		return dia;
	}

	/**
	 * @param dia the dia to set
	 */
	public void setDia(int dia) {
		Calendar calendar = Calendar.getInstance();
		int maxDia = -1;
		
		if (ano != -1 && mes != -1) {
			calendar.set(ano, mes, 1);
			maxDia = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
			
			if(dia >= 1 && dia <= maxDia) {
				this.dia = dia;
			}	
		}
	}


	public int getId() {
		return id;
	}

	public void setId(int id) {
		if(id > 0) {
			this.id = id;
		}
	}

	/**
	 * @return the quilometros
	 */
	public double getQuilometros() {
		return quilometros;
	}

	/**
	 * @param quilometros the quilometros to set
	 */
	public void setQuilometros(double quilometros) {
		if(quilometros >= 0 && quilometros < maxQuilometros){
			this.quilometros = quilometros;
		}
	}
}
